package principal;

import javax.swing.JOptionPane;

import netgames.AtorNetGames;
import netgames.JogadaTetris;
import uteis.Constantes;

public class AtorJogador {

	protected AtorNetGames rede;
	protected String nomeJogadorLocal;
	protected JogadaTetris jogadaTetris;
	protected String servidor = Constantes.SERVIDOR.getConstante();
	protected static AtorJogador interfaceGrafica;
	protected static Tetris tetris;
	
	
	public AtorJogador() {
		rede = new AtorNetGames(this);
	}
	
	public static void main(String[] args) {
		interfaceGrafica = new AtorJogador();
		tetris = new Tetris(interfaceGrafica);
		tetris.setAtorJogador(interfaceGrafica);
		tetris.setVisible(true);
	}
	
	public void enviarJogada(JogadaTetris jogadaTetris) {
		rede.enviarJogada(jogadaTetris);
	}
	
	public boolean desconectar() {
		boolean sucesso = rede.desconectar();
		if(sucesso){
			JOptionPane.showMessageDialog(null, Constantes.DESCONECTADO_SUCESSO.getConstante());
		}else{
			JOptionPane.showMessageDialog(null, Constantes.NAO_CONECTADO.getConstante());
		}
		return sucesso;
	}
	
	public void solicitarDados() {
		nomeJogadorLocal = JOptionPane.showInputDialog(Constantes.DIGITE_SEU_NOME.getConstante());
	}
	
	public boolean conectar() {
		boolean getConectado = tetris.getConectado();
		if(!getConectado){
			solicitarDados();
			if(verificarDadosJogador()){
				getConectado = rede.conectar(servidor, nomeJogadorLocal);
			} else{
				JOptionPane.showMessageDialog(null, Constantes.ERRO_DADOS.getConstante());
			}
		}
		return getConectado;
	}

	public void iniciarPartida() {
		rede.solicitaNovaPartida();
	}

	public void receberInicioPartida(int ordemJogadorLocal) {
		tetris.recebeInicioPartida(nomeJogadorLocal, ordemJogadorLocal);
	}

	public boolean verificarDadosJogador() {
		return nomeJogadorLocal != null;
	}
	
	public void recebeJogada(JogadaTetris jogadaTetris) {
		tetris.receberJogada(jogadaTetris);
		
		if(tetris.getJogador1().getNome().equals(nomeJogadorLocal)){
			tetris.getJogador1().setDaVez(true);
			tetris.getJogador2().setDaVez(false);
		} else{
			tetris.getJogador2().setDaVez(true);
			tetris.getJogador1().setDaVez(false);
		}
		
		jogadaTetris.getTetramino().redesenharQuadrados(jogadaTetris.getTetramino().getQuadradoReferencia(), jogadaTetris.getTetramino().getOrientacao());
	}
	
	public void setNomeJogadorLocal(String nomeJogadorLocal) {
		this.nomeJogadorLocal = nomeJogadorLocal;
	}
	
	public String getNomeJogadorLocal() {
		return nomeJogadorLocal;
	}
	
	public static Tetris getTetris() {
		return tetris;
	}
	
//	public static AtorJogador getInstance(){
//		if(interfaceGrafica == null){
//			interfaceGrafica = new AtorJogador();
//		}
//		return interfaceGrafica;
//	}
	
	public void tratarPartidaNaoIniciada(String message){
		if(message.equals(Constantes.SEM_JOGADORES_SUFICIENTES.getConstante())){
			tetris.setPartidaEmAndamento(false); 
		}
	}
	
	public void finalizarPartidaComErro(String message){
		if(message.equals(Constantes.JOGADOR_DESCONECTOU.getConstante()) || message.equals(Constantes.JOGADOR_CAIU_E_PARTIDA_FINALIZADA.getConstante())){
			tetris.getPreview().resetArea();
			tetris.getTabuleiro().resetArea();
			tetris.ehSuaVez(null);
		}
	}
	
	public AtorNetGames getRede(){
		return rede;
	}
	
}